說明:
將引入的兩個運算元與運算子計算,並回傳結果。
int get_value(int op1, int op2, char op) {
//printf("(%d %c %d)\n", op1, op, op2);
switch (op) {
case '+':
return op1 + op2;
case '-':
return op1 - op2;
case '*':
return op1 * op2;
case '/':
return op1 / op2;
case '%':
return op1 % op2;
default:
return 0;
}
}
說明:
將引入的字串,用相反的順序計算,並將每次計算結果存入堆疊,等待輸出或引用。
void Calculation(char *str) {
char stack[MAX];
int top = 0, j = 0, i;
for (i = strlen(str) - 1; i >= 0; i--) {
// printf("\n%c\n", str[i]);
switch (str[i]) {
case '+':
case '-':
case '*':
case '/':
case '%':
stack[top - 1] = get_value(stack[top], stack[top - 1], str[i]);
top--;
continue;
//遇到運算符號時,將堆疊的前兩個數值做運算,
//被計算的兩個空間移除,存入計算結果。
default:
stack[++top] = str[i] - 48;
continue;
//遇到數值時,減掉48使其為數字型態的真數,存入堆疊空間。
}
}
printf("%s=%d\n",str ,stack[top]);
//結果
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 20
int main() {
char str1[MAX] = {"-+2/*3222"};
char str2[MAX] = {"-+-/421*23*41"};
//測資1,2
Calculation(str1);
Calculation(str2);
return 0;
}
1:
2: